home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / amos / samplesm.lha / SamplesMaster.AMOS / SamplesMaster.amosSourceCode
AMOS Source Code  |  1998-08-11  |  45KB  |  1,396 lines

  1. '-> SamplesMaster by Stefano Regattin  
  2. 'i> 7 luglio 1996
  3. 'm> 8,9,11,13,15,16,21,22,23,25,27,28,30 luglio 1996 
  4. 'm> 1,2,4,7,8,10,12,13,14,16,17,20,21,28,29 agosto 1996
  5. 'm> 4,12,13,17 ottobre 1996
  6. 'm> 1,11,13,14 novembre 1996 
  7. 'm> 20 febbraio 1997 
  8. 'm> 8 marzo 1997 
  9. 'm> 17 giugno 1997 
  10. 'm> 10 novembre 1997 
  11. 'm> 31 marzo 1998
  12. 'm> 3,4,5,8,9,11,20,25,26,27,29 aprile 1998
  13. 'm> 5,7,8,9,19,23 luglio 1998  
  14. 'm> 11 agosto 1998 
  15. '------------------
  16. Set Buffer 40
  17. BANCO=65535
  18. BANCODIIO=65534
  19. BANCO3=65533
  20. Global ANNOTAZIONI$,FILE$,NOMEFILE$,ZONAATTIVA$
  21. Global ALTEZZA,ANOMALOIFF,BANCO,BANCODIIO,BANCO3,CICLO,FILTRO
  22. Global FINECAMPIONE,FREQUENZA,GENERACAMPIONE,INIZIO,INIZIOCAMPIONE
  23. Global LUNGHEZZACAMPIONE,NUOVAFINECAMPIONE,NUOVAFREQUENZA,NUOVOINIZIOCAMPIONE
  24. Global PASSO,POSIZIONEINGRANDIMENTO,POSIZIONESLIDER,RIDUZIONE,SENZAMEMORIA
  25. Global ULTIMALINEA,XLINEAFINECAMPIONE,XLINEAINIZIOCAMPIONE
  26. Global YSLIDERINGRANDIMENTO,ZERO
  27. Global DIVISIONESLIDERINGRANDIMENTO#
  28. Dim F0RMADONDA(8191)
  29. Global F0RMADONDA()
  30. Proc SETTASCHERMO
  31. Proc ARCOBALENO
  32. Reserve As Chip Work BANCO,512
  33. FILTRO=True
  34. FREQUENZA=8363
  35. Proc CONDIZIONEINIZIALE
  36. Repeat 
  37.  Repeat 
  38.   TASTODELTOPOPREMUTO=Mouse Key
  39.   ZONATOPO=Mouse Zone
  40.   If TASTODELTOPOPREMUTO=1
  41.    If DENTROZONA=False
  42.     If ZONATOPO=1
  43.      Inverse On : Print At(0,ULTIMALINEA-3);"Suona"
  44.      Proc SUONA
  45.     End If 
  46.     If ZONATOPO=2
  47.      Inverse On : Print At(0,ULTIMALINEA-2);"Ferma"
  48.      Sam Stop 
  49.     End If 
  50.     If ZONATOPO=3
  51.      CICLO= Not CICLO : Proc CICLO
  52.     End If 
  53.     If ZONATOPO=4
  54.      FILTRO= Not FILTRO : Proc FILTRO
  55.     End If 
  56.     If ZONATOPO=5
  57.      Inverse On : Print At(19,ULTIMALINEA-2);"Tutto"
  58.      NUOVOINIZIOCAMPIONE=Start(BANCO)
  59.      NUOVAFINECAMPIONE=Start(BANCO)+Length(BANCO)-1
  60.      LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  61.      LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  62.      Proc MOSTRACAMPIONE
  63.      INIZIO=True : Proc INIZIO
  64.      POSIZIONESLIDER=0
  65.      Proc SLIDERINGRANDIMENTO
  66.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  67.     End If 
  68.     If ZONATOPO=6
  69.      Inverse On : Print At(26,ULTIMALINEA-2);"Tra le linee"
  70.      Proc MOSTRACAMPIONE
  71.      INIZIO=True : Proc INIZIO
  72.      POSIZIONESLIDER=0
  73.      Proc SLIDERINGRANDIMENTO
  74.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  75.     End If 
  76.     If ZONATOPO=7
  77.      INIZIO=True : Proc INIZIO
  78.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  79.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  80.      Proc SLIDERINGRANDIMENTO : Proc INGRANDISCI
  81.     End If 
  82.     If ZONATOPO=8
  83.      INIZIO=False : Proc INIZIO
  84.      POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  85.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  86.      Proc SLIDERINGRANDIMENTO : Proc INGRANDISCI
  87.     End If 
  88.     If ZONATOPO=9
  89.      Inverse On : Print At(51,ULTIMALINEA-2);"<Indietro"
  90.      If INIZIO=True
  91.       Proc CERCALOZERO[NUOVOINIZIOCAMPIONE,False] : NUOVOINIZIOCAMPIONE=Param
  92.       LIMITI[NUOVOINIZIOCAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  93.       NUOVOINIZIOCAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  94.      Else 
  95.       Proc CERCALOZERO[NUOVAFINECAMPIONE,False] : NUOVAFINECAMPIONE=Param
  96.       LIMITI[NUOVAFINECAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  97.       NUOVAFINECAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  98.      End If 
  99.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  100.      Proc SLIDERINGRANDIMENTO
  101.      Proc LINEE : Proc INGRANDISCI
  102.     End If 
  103.     If ZONATOPO=10
  104.      Inverse On : Print At(61,ULTIMALINEA-2);"Avanti>"
  105.      If INIZIO=True
  106.       Proc CERCALOZERO[NUOVOINIZIOCAMPIONE,True] : NUOVOINIZIOCAMPIONE=Param
  107.       LIMITI[NUOVOINIZIOCAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  108.       NUOVOINIZIOCAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  109.      Else 
  110.       Proc CERCALOZERO[NUOVAFINECAMPIONE,True] : NUOVAFINECAMPIONE=Param
  111.       LIMITI[NUOVAFINECAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  112.       NUOVAFINECAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  113.      End If 
  114.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  115.      Proc SLIDERINGRANDIMENTO
  116.      Proc LINEE : Proc INGRANDISCI
  117.     End If 
  118.     If ZONATOPO=11
  119.      Inverse On : Print At(69,ULTIMALINEA-3);"Carica" : Inverse Off 
  120.      Proc CARICAUNFILE
  121.      Exit If SENZAMEMORIA=True,2
  122.      If Exist(FILE$)
  123.       Proc CARICARAWOIFF
  124.       Proc CONDIZIONEINIZIALE
  125.      End If 
  126.     End If 
  127.     If ZONATOPO=12
  128.      If ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  129.       Proc TIC[Chr$(151)+Chr$(152)+" "+Chr$(153)+Chr$(154)+" spostamento di un Byte",ULTIMALINEA]
  130.       If INIZIO=True
  131.        NUOVOINIZIOCAMPIONE=POSIZIONEINGRANDIMENTO+X Screen(X Mouse)
  132.        NUOVOINIZIOCAMPIONE=Max(NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE)
  133.       Else 
  134.        NUOVAFINECAMPIONE=POSIZIONEINGRANDIMENTO+X Screen(X Mouse)
  135.        NUOVAFINECAMPIONE=Min(NUOVAFINECAMPIONE,FINECAMPIONE)
  136.       End If 
  137.       POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  138.       Proc SLIDERINGRANDIMENTO
  139.       Proc LINEE : Proc INGRANDISCI
  140.      Else 
  141.       ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  142.       Proc MOSTRALAZONAATTIVA
  143.      End If 
  144.      NUOVOMESSAGGIO=True
  145.     End If 
  146.     If ZONATOPO=13
  147.      If ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  148.       If INIZIO=True
  149.        NUOVOINIZIOCAMPIONE=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO
  150.        NUOVOINIZIOCAMPIONE=Max(NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE)
  151.        POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  152.       Else 
  153.        NUOVAFINECAMPIONE=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO
  154.        NUOVAFINECAMPIONE=Min(NUOVAFINECAMPIONE,FINECAMPIONE)
  155.        POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-320
  156.       End If 
  157.       POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  158.       Proc SLIDERINGRANDIMENTO
  159.       Proc LINEE : Proc INGRANDISCI
  160.      Else 
  161.       ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  162.       Proc MOSTRALAZONAATTIVA
  163.      End If 
  164.     End If 
  165.     If ZONATOPO=14
  166.      Inverse On : Print At(6,ULTIMALINEA-2);"Genera" : Inverse Off 
  167.      Proc GENERACAMPIONE
  168.      GENERACAMPIONE=False
  169.      Proc CONDIZIONEINIZIALE
  170.     End If 
  171.     If ZONATOPO=15
  172.      Inverse On : Print At(69,ULTIMALINEA-2);"Salva"
  173.      Proc SALVAUNFILE
  174.      Proc MESSAGGI
  175.     End If 
  176.     If ZONATOPO=16
  177.      Exit 2
  178.     End If 
  179.     If ZONATOPO=18
  180.      Inverse On 
  181.      Print At(0,ULTIMALINEA-5);"Frequenza"
  182.      TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  183.      NUOVAFREQUENZA=FREQUENZA
  184.      Proc FREQUENZA
  185.      NUOVOMESSAGGIO=True
  186.     End If 
  187.     If ZONATOPO=19
  188.      Inverse On 
  189.      Print At(9,ULTIMALINEA-5);Chr$(147)+Chr$(148)
  190.      Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  191.      Inc NUOVAFREQUENZA
  192.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  193.      Proc FREQUENZA
  194.      NUOVOMESSAGGIO=True
  195.     End If 
  196.     If ZONATOPO=20
  197.      Inverse On 
  198.      Print At(11,ULTIMALINEA-5);Chr$(149)+Chr$(150)
  199.      Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  200.      Dec NUOVAFREQUENZA
  201.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  202.      Proc FREQUENZA
  203.      NUOVOMESSAGGIO=True
  204.     End If 
  205.     If ZONATOPO=21
  206.      Inverse On : Print At(26,ULTIMALINEA-5);"MixTimbri" : Inverse Off 
  207.      Proc MISCELATIMBRI
  208.      GENERACAMPIONE=False
  209.      Proc CONDIZIONEINIZIALE
  210.     End If 
  211.     DENTROZONA=True
  212.    End If 
  213.    If ZONATOPO=17
  214.     POSIZIONESLIDER=X Screen(X Mouse)/DIVISIONESLIDERINGRANDIMENTO#
  215.     Proc SLIDERINGRANDIMENTO
  216.     POSIZIONEINGRANDIMENTO=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO-319
  217.     Proc INGRANDISCI
  218.    End If 
  219.   Else If TASTODELTOPOPREMUTO=2
  220.    If ZONATOPO=19
  221.     Inverse On 
  222.     Print At(9,ULTIMALINEA-5);Chr$(147)+Chr$(148)
  223.     Proc TIC["Tasto destro del mouse>incremento veloce",ULTIMALINEA]
  224.     Inc NUOVAFREQUENZA
  225.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  226.     Proc FREQUENZA
  227.     NUOVOMESSAGGIO=True
  228.    End If 
  229.    If ZONATOPO=20
  230.     Inverse On 
  231.     Print At(11,ULTIMALINEA-5);Chr$(149)+Chr$(150)
  232.     Proc TIC["Tasto destro del mouse>decremento veloce",ULTIMALINEA]
  233.     Dec NUOVAFREQUENZA
  234.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  235.     Proc FREQUENZA
  236.     NUOVOMESSAGGIO=True
  237.    End If 
  238.   Else 
  239.    Inverse Off 
  240.    Print At(0,ULTIMALINEA-3);"Suona"
  241.    Print At(0,ULTIMALINEA-2);"Ferma"
  242.    Print At(19,ULTIMALINEA-2);"Tutto"
  243.    Print At(26,ULTIMALINEA-2);"Tra le linee"
  244.    Print At(51,ULTIMALINEA-2);"<Indietro"
  245.    Print At(61,ULTIMALINEA-2);"Avanti>"
  246.    Print At(69,ULTIMALINEA-3);"Carica"
  247.    Print At(69,ULTIMALINEA-2);"Salva"
  248.    Print At(0,ULTIMALINEA-5);"Frequenza";Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  249.    Print At(26,ULTIMALINEA-5);"MixTimbri"
  250.    If NUOVOMESSAGGIO=True
  251.     Proc MESSAGGI
  252.     NUOVOMESSAGGIO=False
  253.    End If 
  254.    DENTROZONA=False
  255.   End If 
  256.   TASTOPREMUTO$=Inkey$
  257.  Until TASTOPREMUTO$<>""
  258.  If ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  259.   If INIZIO=True
  260.    If TASTOPREMUTO$=Cright$
  261.     Add NUOVOINIZIOCAMPIONE,PASSO
  262.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  263.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  264.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  265.     Proc SLIDERINGRANDIMENTO
  266.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  267.    End If 
  268.    If TASTOPREMUTO$=Cleft$
  269.     Add NUOVOINIZIOCAMPIONE,-PASSO
  270.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  271.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  272.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  273.     Proc SLIDERINGRANDIMENTO
  274.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  275.    End If 
  276.   Else 
  277.    If TASTOPREMUTO$=Cright$
  278.     Add NUOVAFINECAMPIONE,PASSO
  279.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  280.     NUOVAFINECAMPIONE=Param : Proc LINEE
  281.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  282.     Proc SLIDERINGRANDIMENTO
  283.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  284.    End If 
  285.    If TASTOPREMUTO$=Cleft$
  286.     Add NUOVAFINECAMPIONE,-PASSO
  287.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  288.     NUOVAFINECAMPIONE=Param : Proc LINEE
  289.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  290.     Proc SLIDERINGRANDIMENTO
  291.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  292.    End If 
  293.   End If 
  294.  Else 
  295.   If INIZIO=True
  296.    If TASTOPREMUTO$=Cright$
  297.     If TASTODELTOPOPREMUTO=0
  298.      Add NUOVOINIZIOCAMPIONE,320
  299.     Else 
  300.      Inc NUOVOINIZIOCAMPIONE
  301.     End If 
  302.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  303.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  304.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  305.     Proc SLIDERINGRANDIMENTO
  306.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  307.    End If 
  308.    If TASTOPREMUTO$=Cleft$
  309.     If TASTODELTOPOPREMUTO=0
  310.      Add NUOVOINIZIOCAMPIONE,-320
  311.     Else 
  312.      Dec NUOVOINIZIOCAMPIONE
  313.     End If 
  314.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  315.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  316.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  317.     Proc SLIDERINGRANDIMENTO
  318.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  319.    End If 
  320.   Else 
  321.    If TASTOPREMUTO$=Cright$
  322.     If TASTODELTOPOPREMUTO=0
  323.      Add NUOVAFINECAMPIONE,320
  324.     Else 
  325.      Inc NUOVAFINECAMPIONE
  326.     End If 
  327.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  328.     NUOVAFINECAMPIONE=Param : Proc LINEE
  329.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  330.     Proc SLIDERINGRANDIMENTO
  331.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  332.    End If 
  333.    If TASTOPREMUTO$=Cleft$
  334.     If TASTODELTOPOPREMUTO=0
  335.      Add NUOVAFINECAMPIONE,-320
  336.     Else 
  337.      Dec NUOVAFINECAMPIONE
  338.     End If 
  339.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  340.     NUOVAFINECAMPIONE=Param : Proc LINEE
  341.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  342.     Proc SLIDERINGRANDIMENTO
  343.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  344.    End If 
  345.   End If 
  346.  End If 
  347.  If TASTOPREMUTO$=Cup$
  348.   ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  349.   Proc MOSTRALAZONAATTIVA
  350.  End If 
  351.  If TASTOPREMUTO$=Cdown$
  352.   ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  353.   Proc MOSTRALAZONAATTIVA
  354.  End If 
  355. Until TASTOPREMUTO$=Chr$(27)
  356. Inverse On : Print At(76,ULTIMALINEA-2);"Esci" : Wait 50
  357. Erase BANCO : Reserve Zone : Rainbow Del 0 : Screen Close 0 : End 
  358. Procedure ARCOBALENO
  359. Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
  360. Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
  361. Set Rainbow 0,1,16,"","",""
  362. For LINEA=0 To 15 : Read DATO : Rain(0,LINEA)=DATO : Next LINEA
  363. If Ntsc Then LUNGHEZZAARCOBALENO=223 Else LUNGHEZZAARCOBALENO=271
  364. Rainbow 0,2,0,LUNGHEZZAARCOBALENO
  365. End Proc
  366. Procedure AZZERAFORMADONDA
  367. Shared LUNGHEZZASINTETICO
  368. For A=0 To LUNGHEZZASINTETICO-1
  369.  F0RMADONDA(A)=0
  370. Next A
  371. End Proc
  372. Procedure CARICARAWOIFF
  373. INDIRIZZO=Start(BANCODIIO)+8
  374. If Peek$(INDIRIZZO,4)="8SVX"
  375.  Add INDIRIZZO,12
  376.  LUNGHEZZABANCO=Leek(INDIRIZZO)
  377.  If LUNGHEZZABANCO=0
  378.   Add INDIRIZZO,4
  379.   LUNGHEZZABANCO=Leek(INDIRIZZO)
  380.  Else 
  381.   Add INDIRIZZO,4
  382.  End If 
  383.  Add INDIRIZZO,8
  384.  FREQUENZA=Deek(INDIRIZZO)
  385.  Add INDIRIZZO,8
  386.  If Peek$(INDIRIZZO,4)="NAME"
  387.   Add INDIRIZZO,4
  388.   DATO=Leek(INDIRIZZO)
  389.   Add INDIRIZZO,4+DATO
  390.  End If 
  391.  If Peek$(INDIRIZZO,4)="ANNO"
  392.   Add INDIRIZZO,4
  393.   DATO=Leek(INDIRIZZO)
  394.   Add INDIRIZZO,4
  395.   ANNOTAZIONI$=Peek$(INDIRIZZO,DATO)-Chr$(0)
  396.   Add INDIRIZZO,DATO
  397.  End If 
  398.  If Peek$(INDIRIZZO,4)="BODY"
  399.   Add INDIRIZZO,4
  400.   LUNGHEZZADATI=Leek(INDIRIZZO)
  401.   Add INDIRIZZO,4
  402.   LUNGHEZZABANCO=Max(LUNGHEZZABANCO,LUNGHEZZADATI)
  403.   Reserve As Chip Work BANCO,LUNGHEZZABANCO
  404.   Copy INDIRIZZO,INDIRIZZO+LUNGHEZZABANCO-1 To Start(BANCO)
  405.  Else 
  406.   Proc TIC[FILE$+Str$(Length(BANCODIIO))+" Byte",ULTIMALINEA-1]
  407.   Proc TIC["� un IFF anomalo, non posso caricarlo!",ULTIMALINEA]
  408.   Wait 200
  409.   NOMEFILE$=""
  410.  End If 
  411. Else 
  412.  LUNGHEZZABANCO=Length(BANCODIIO)
  413.  Reserve As Chip Work BANCO,LUNGHEZZABANCO
  414.  Copy Start(BANCODIIO),Start(BANCODIIO)+LUNGHEZZABANCO-1 To Start(BANCO)
  415.  FREQUENZA=8363
  416.  ANNOTAZIONI$=""
  417. End If 
  418. Erase BANCODIIO
  419. End Proc
  420. Procedure CARICAUNFILE
  421. Sam Loop Off : Sam Stop : CICLO=False
  422. FILE$=Fsel$("**","","Carica un campione audio","Premi Esc per uscire")
  423. If Exist(FILE$)
  424.  Open In 1,FILE$
  425.  LUNGHEZZABANCO=Max(Lof(1),512)
  426.  Close 1
  427.  MEMORIA=Chip Free+Fast Free
  428.  If LUNGHEZZABANCO>MEMORIA
  429.   Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
  430.   Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  431.   SENZAMEMORIA=True
  432.  Else 
  433.   Reserve As Work BANCODIIO,LUNGHEZZABANCO
  434.   Bload FILE$,Start(BANCODIIO)
  435.   SEPARATORE=Instr(FILE$,":") : POSIZIONE=1
  436.   For A=1 To Len(FILE$)
  437.    If Instr(FILE$,"/",POSIZIONE)>0
  438.     SEPARATORECASSETTO=Instr(FILE$,"/",POSIZIONE)
  439.     POSIZIONE=SEPARATORECASSETTO+1
  440.    End If 
  441.   Next A
  442.   SEPARATORE=Max(SEPARATORE,SEPARATORECASSETTO)
  443.   PERCORSO$=Left$(FILE$,SEPARATORE)
  444.   If Right$(PERCORSO$,1)="/"
  445.    PERCORSO$=Left$(PERCORSO$,Len(PERCORSO$)-1)
  446.   End If 
  447.   NOMEFILE$=Right$(FILE$,Len(FILE$)-SEPARATORE)
  448.   SENZAMEMORIA=False
  449.  End If 
  450. End If 
  451. End Proc
  452. Procedure CERCALOZERO[POSIZIONE,AVANTI]
  453. If AVANTI=True
  454.  Repeat 
  455.   Inc POSIZIONE
  456.   DATO=Peek(POSIZIONE)
  457.  Until DATO=0
  458. Else 
  459.  Repeat 
  460.   Dec POSIZIONE
  461.   DATO=Peek(POSIZIONE)
  462.  Until DATO=0
  463. End If 
  464. End Proc[POSIZIONE]
  465. Procedure CICLO
  466. If CICLO=True
  467.  Sam Loop On 
  468.  If GENERACAMPIONE=True
  469.   Inverse On : Print At(12,8);"Ciclo" : Inverse Off 
  470.  Else 
  471.   Inverse On : Print At(6,ULTIMALINEA-3);"Ciclo" : Inverse Off 
  472.  End If 
  473. Else 
  474.  Sam Loop Off 
  475.  If GENERACAMPIONE=True
  476.   Print At(12,8);"Ciclo"
  477.  Else 
  478.   Print At(6,ULTIMALINEA-3);"Ciclo"
  479.  End If 
  480. End If 
  481. End Proc
  482. Procedure CONDIZIONEINIZIALE
  483. INIZIO=True
  484. NUOVOINIZIOCAMPIONE=Start(BANCO)
  485. NUOVAFINECAMPIONE=Start(BANCO)+Length(BANCO)-1
  486. LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  487. LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  488. NUOVAFREQUENZA=FREQUENZA
  489. Cls 
  490. Proc MOSTRACAMPIONE
  491. POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  492. Proc INGRANDISCI
  493. Proc SETTALEZONE
  494. Proc MESSAGGI
  495. Proc CICLO
  496. Proc FILTRO
  497. Proc FREQUENZA
  498. ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  499. Proc MOSTRALAZONAATTIVA
  500. Print At(0,ULTIMALINEA-4);"Sorgente>";ANNOTAZIONI$
  501. End Proc
  502. Procedure FILTRO
  503. If FILTRO=True
  504.  Led On 
  505.  If GENERACAMPIONE=True
  506.   Inverse On : Print At(18,8);"Filtro" : Inverse Off 
  507.  Else 
  508.   Inverse On : Print At(12,ULTIMALINEA-3);"Filtro" : Inverse Off 
  509.  End If 
  510. Else 
  511.  Led Off 
  512.  If GENERACAMPIONE=True
  513.   Print At(18,8);"Filtro"
  514.  Else 
  515.   Print At(12,ULTIMALINEA-3);"Filtro"
  516.  End If 
  517. End If 
  518. End Proc
  519. Procedure FREQUENZA
  520. If GENERACAMPIONE=True
  521.  Print At(39,8);Str$(NUOVAFREQUENZA)-" ";
  522. Else 
  523.  Print At(14,ULTIMALINEA-5);Str$(NUOVAFREQUENZA)-" ";
  524. End If 
  525. Print " Hertz "
  526. End Proc
  527. Procedure GENERACAMPIONE
  528. Shared FREQUENZAMASSIMA,LUNGHEZZASINTETICO,MULTIPLO#
  529. NOMEFILE$="Sintetico"
  530. GENERACAMPIONE=True
  531. Cls 
  532. Proc TIC["Indica la lunghezza in multipli di 512 Byte (01-16)",ULTIMALINEA]
  533. RISPOSTA$=Input$(2) : RISPOSTA=Val(RISPOSTA$)
  534. Proc LIMITI[RISPOSTA,1,16] : RISPOSTA=Param
  535. LUNGHEZZASINTETICO=512*RISPOSTA
  536. Reserve Zone 21
  537. Ink 2 : Draw 0,31 To 511,31 : Draw 0,103 To 511,103 : Ink 1
  538. Set Zone 1,0,0 To 511,63
  539. Print At(0,8);Zone$("Suona",2)
  540. Print At(6,8);Zone$("Ferma",3)
  541. Print At(12,8);Zone$("Ciclo",4)
  542. Print At(18,8);Zone$("Filtro",5)
  543. Set Zone 6,0,72 To 511,135
  544. Print At(0,18);Zone$("Suona",7)
  545. Print At(6,18);"Forme d'onda:"
  546. Print At(6,19);Zone$("Sinusoidale",8)
  547. Print At(6,20);Zone$("Triangolare",9)
  548. Print At(6,21);Zone$("Dente di sega",10)
  549. Print At(6,22);Zone$("Quadra",11)
  550. Print At(6,23);Zone$("Disegno",12)
  551. Print At(20,18);"Operazioni:"
  552. Print At(20,19);Zone$("Somma",13)
  553. Print At(20,20);Zone$("Sottrai",14)
  554. Print At(20,21);Zone$("Inverti",15)
  555. Print At(20,22);Zone$("Rovescia",16)
  556. Print At(76,17); Using "####";1
  557. Hslider 0,136 To 607,143,128,0,1
  558. Set Zone 17,0,136 To 607,143
  559. Print At(25,8);Zone$("Frequenza",18);
  560. Print Zone$(Chr$(147)+Chr$(148),19);
  561. Print Zone$(Chr$(149)+Chr$(150),20);
  562. Print ">";Str$(NUOVAFREQUENZA)-" ";" Hertz"
  563. Print At(20,23);Zone$("Progressione",21)
  564. Proc CICLO
  565. Proc FILTRO
  566. Reserve As Chip Work BANCO,LUNGHEZZASINTETICO
  567. Reserve As Chip Work BANCODIIO,LUNGHEZZASINTETICO
  568. FREQUENZAMASSIMA=LUNGHEZZASINTETICO/4
  569. LUNGHEZZA$=Str$(LUNGHEZZASINTETICO)+" Byte"
  570. Print At(80-Len(LUNGHEZZA$),8);LUNGHEZZA$
  571. Proc TIC["Premi Esc per uscire",ULTIMALINEA]
  572. Repeat 
  573.  Repeat 
  574.   TASTOPREMUTO$=Inkey$
  575.   TASTODELTOPOPREMUTO=Mouse Key
  576.   ZONATOPO=Mouse Zone
  577.   If TASTODELTOPOPREMUTO=1
  578.    If DENTROZONA=False
  579.     If ZONATOPO=2
  580.      Inverse On : Print At(0,8);"Suona"
  581.      Sam Raw 1,Start(BANCO),Length(BANCO),NUOVAFREQUENZA
  582.      Sam Raw 2,Start(BANCO),Length(BANCO),NUOVAFREQUENZA
  583.     End If 
  584.      If ZONATOPO=3
  585.       Inverse On : Print At(6,8);"Ferma"
  586.       Sam Stop 
  587.      End If 
  588.      If ZONATOPO=4
  589.       CICLO= Not CICLO : Proc CICLO
  590.      End If 
  591.      If ZONATOPO=5
  592.       FILTRO= Not FILTRO : Proc FILTRO
  593.      End If 
  594.     If ZONATOPO=7
  595.      Inverse On : Print At(0,18);"Suona"
  596.      Sam Raw 4,Start(BANCODIIO),Length(BANCODIIO),NUOVAFREQUENZA
  597.      Sam Raw 8,Start(BANCODIIO),Length(BANCODIIO),NUOVAFREQUENZA
  598.     End If 
  599.     If ZONATOPO=8
  600.      Inverse On : Print At(6,19);"Sinusoidale"
  601.      Cls 0,0,72 To 639+1,135+1
  602.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  603.      UNITA#=2*Pi#/LUNGHEZZASINTETICO
  604.      For X=0 To LUNGHEZZASINTETICO-1
  605.       DATO=Sin(UNITA#*X)*127
  606.       Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  607.       If DATO<0
  608.        Add DATO,256
  609.       End If 
  610.       INDIRIZZO=Start(BANCODIIO)+X
  611.       Poke INDIRIZZO,DATO
  612.      Next X
  613.      Proc MULTIPLO
  614.     End If 
  615.     If ZONATOPO=9
  616.      Inverse On : Print At(6,20);"Triangolare"
  617.      Cls 0,0,72 To 639+1,135+1
  618.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  619.      For X=0 To LUNGHEZZASINTETICO-1
  620.       If X<LUNGHEZZASINTETICO/4
  621.        DATO=(X*512)/LUNGHEZZASINTETICO
  622.       End If 
  623.       If X>LUNGHEZZASINTETICO/4-1 and X<LUNGHEZZASINTETICO/4*3
  624.        DATO=((LUNGHEZZASINTETICO/2-X)*512)/LUNGHEZZASINTETICO-1
  625.       End If 
  626.       If X>LUNGHEZZASINTETICO/4*3-1
  627.        DATO=((X-LUNGHEZZASINTETICO)*512)/LUNGHEZZASINTETICO
  628.       End If 
  629.       Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  630.       If DATO<0
  631.        Add DATO,256
  632.       End If 
  633.       INDIRIZZO=Start(BANCODIIO)+X
  634.       Poke INDIRIZZO,DATO
  635.      Next X
  636.      Proc MULTIPLO
  637.     End If 
  638.     If ZONATOPO=10
  639.      Inverse On : Print At(6,21);"Dente di sega"
  640.      Cls 0,0,72 To 639+1,135+1
  641.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  642.      For X=0 To LUNGHEZZASINTETICO-1
  643.       DATO=((X/2-LUNGHEZZASINTETICO/4)*512)/LUNGHEZZASINTETICO
  644.       Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  645.       If DATO<0
  646.        Add DATO,256
  647.       End If 
  648.       INDIRIZZO=Start(BANCODIIO)+X
  649.       Poke INDIRIZZO,DATO
  650.      Next X
  651.      Proc MULTIPLO
  652.     End If 
  653.     If ZONATOPO=11
  654.      Inverse On : Print At(6,22);"Quadra"
  655.      Cls 0,0,72 To 639+1,135+1
  656.      Ink 2 : Draw 0,103 To 511,103 : Ink 1 : Gr Locate 0,103
  657.      For X=0 To LUNGHEZZASINTETICO-1
  658.       If X<LUNGHEZZASINTETICO/2
  659.        DATO=127
  660.       Else 
  661.        DATO=-128
  662.       End If 
  663.       Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  664.       If DATO<0
  665.        Add DATO,256
  666.       End If 
  667.       INDIRIZZO=Start(BANCODIIO)+X
  668.       Poke INDIRIZZO,DATO
  669.      Next X
  670.      Proc MULTIPLO
  671.     End If 
  672.     If ZONATOPO=12
  673.      Inverse On : Print At(6,23);"Disegno"
  674.      Proc TIC["Premi il tasto destro del mouse per finire",ULTIMALINEA]
  675.      Repeat 
  676.       TASTODELTOPOPREMUTO=Mouse Key
  677.       ZONATOPO=Mouse Zone
  678.       If TASTODELTOPOPREMUTO=1 and ZONATOPO=6
  679.        XTOPO=X Screen(X Mouse) : YTOPO=Y Screen(Y Mouse)
  680.        Ink 0 : Box XTOPO,72 To XTOPO+1,135
  681.        Ink 2 : Draw XTOPO,103 To XTOPO+1,103
  682.        Ink 1 : Draw XTOPO,YTOPO To XTOPO+1,YTOPO
  683.        DATO=(103-YTOPO)*4
  684.        If DATO<0
  685.         Add DATO,256
  686.        End If 
  687.        INDIRIZZO=Start(BANCODIIO)+XTOPO*LUNGHEZZASINTETICO/512
  688.        For A=0 To LUNGHEZZASINTETICO/512
  689.         Poke INDIRIZZO+A,DATO
  690.        Next A
  691.       End If 
  692.      Until TASTODELTOPOPREMUTO=2
  693.      Cls 0,0,72 To 639+1,135+1
  694.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  695.      Gr Locate 0,103
  696.      For X=0 To LUNGHEZZASINTETICO-1 Step LUNGHEZZASINTETICO/512
  697.       DATO=Peek(Start(BANCODIIO)+X)
  698.       If DATO>127
  699.        Add DATO,-256
  700.       End If 
  701.       Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  702.      Next X
  703.      NUOVOMESSAGGIO=True
  704.     End If 
  705.     If ZONATOPO=13
  706.      Inverse On : Print At(20,19);"Somma"
  707.      Proc SOMMA
  708.      Proc MOSTRASINTETICO
  709.     End If 
  710.     If ZONATOPO=14
  711.      Inverse On : Print At(20,20);"Sottrai"
  712.      For X=0 To LUNGHEZZASINTETICO-1
  713.       DATO=Peek(Start(BANCODIIO)+X)
  714.       If DATO>127
  715.        Add DATO,-256
  716.       End If 
  717.       Add F0RMADONDA(X),-DATO
  718.      Next X
  719.      Proc MOSTRASINTETICO
  720.     End If 
  721.     If ZONATOPO=15
  722.      Inverse On : Print At(20,21);"Inverti"
  723.      Cls 0,0,72 To 639+1,135+1
  724.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  725.      Gr Locate 0,103
  726.      For X=0 To LUNGHEZZASINTETICO-1
  727.       DATO=Peek(Start(BANCODIIO)+X)
  728.       If DATO>127
  729.        Add DATO,-256
  730.       End If 
  731.       DATO= Not DATO
  732.       Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  733.       If DATO<0
  734.        Add DATO,256
  735.       End If 
  736.       INDIRIZZO=Start(BANCODIIO)+X
  737.       Poke INDIRIZZO,DATO
  738.      Next X
  739.     End If 
  740.     If ZONATOPO=16
  741.      Inverse On : Print At(20,22);"Rovescia"
  742.      Cls 0,0,72 To 639+1,135+1
  743.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  744.      Reserve As Work BANCO3,LUNGHEZZASINTETICO
  745.      For X=0 To LUNGHEZZASINTETICO-1
  746.       DATO=Peek(Start(BANCODIIO)+X)
  747.       INDIRIZZO=Start(BANCO3)+LUNGHEZZASINTETICO-1-X
  748.       Poke INDIRIZZO,DATO
  749.       If DATO>127
  750.        Add DATO,-256
  751.       End If 
  752.       Polyline To((LUNGHEZZASINTETICO-1-X)*512)/LUNGHEZZASINTETICO,103-DATO/4
  753.      Next X
  754.      Copy Start(BANCO3),Start(BANCO3)+Length(BANCO3)-1 To Start(BANCODIIO)
  755.      Erase BANCO3
  756.     End If 
  757.     If ZONATOPO=18
  758.      Inverse On : Print At(25,8);"Frequenza"
  759.      Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  760.      NUOVAFREQUENZA=FREQUENZA
  761.      Proc FREQUENZA
  762.      NUOVOMESSAGGIO=True
  763.     End If 
  764.     If ZONATOPO=19
  765.      Inverse On : Print At(34,8);Chr$(147)+Chr$(148)
  766.      Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  767.      Inc NUOVAFREQUENZA
  768.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  769.      Proc FREQUENZA
  770.      NUOVOMESSAGGIO=True
  771.     End If 
  772.     If ZONATOPO=20
  773.      Inverse On : Print At(36,8);Chr$(149)+Chr$(150)
  774.      Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  775.      Dec NUOVAFREQUENZA
  776.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  777.      Proc FREQUENZA
  778.      NUOVOMESSAGGIO=True
  779.     End If 
  780.     If ZONATOPO=21
  781.      Inverse On : Print At(20,23);"Progressione"
  782.      Proc TIC["Progressione aritmetica o geometrica (a/g) ?",ULTIMALINEA]
  783.      RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  784.      If RISPOSTA$="a"
  785.       PROGRESSIONE$="Aritmetica"
  786.      End If 
  787.      If RISPOSTA$="g"
  788.       PROGRESSIONE$="Geometrica"
  789.      End If 
  790.      If PROGRESSIONE$<>""
  791.       Proc TIC["Inizio della progressione (0001-"+Str$(FREQUENZAMASSIMA)-" "+") ?",ULTIMALINEA]
  792.       PRIMOTERMINE$=Input$(4) : PRIMOTERMINE=Val(PRIMOTERMINE$)
  793.       Proc LIMITI[PRIMOTERMINE,1,FREQUENZAMASSIMA] : PRIMOTERMINE=Param
  794.       Proc TIC["Fine della progressione (0001-"+Str$(FREQUENZAMASSIMA)-" "+") ?",ULTIMALINEA]
  795.       ULTIMOTERMINE$=Input$(4) : ULTIMOTERMINE=Val(ULTIMOTERMINE$)
  796.       Proc LIMITI[ULTIMOTERMINE,1,FREQUENZAMASSIMA] : ULTIMOTERMINE=Param
  797.       Proc TIC["Numero di valori intermedi (001-126) ?",ULTIMALINEA]
  798.       VLORIINTERMEDI$=Input$(3) : VLORITOTALI=Val(VLORIINTERMEDI$)+2
  799.       Proc LIMITI[VLORITOTALI,3,128] : VLORITOTALI=Param
  800.      End If 
  801.      If PROGRESSIONE$="Aritmetica"
  802.       RAGIONE#=(ULTIMOTERMINE-PRIMOTERMINE)/(VLORITOTALI-1*1.0)
  803.       For A=1 To VLORITOTALI
  804.        If A=VLORITOTALI
  805.         MULTIPLO#=ULTIMOTERMINE
  806.        Else 
  807.         MULTIPLO#=RAGIONE#*(A-1)+PRIMOTERMINE
  808.        End If 
  809.        Proc TIC["Valore"+Str$(A)+":"+Str$(MULTIPLO#),ULTIMALINEA]
  810.        Proc MULTIPLO
  811.        Cls 0,0,72 To 639+1,135+1
  812.        Ink 2 : Draw 0,103 To 511,103 : Ink 1
  813.        Proc SOMMA
  814.       Next A
  815.       For A=0 To LUNGHEZZASINTETICO Step 4
  816.        Loke Start(BANCODIIO)+A,0
  817.       Next A
  818.       Proc MOSTRASINTETICO
  819.      End If 
  820.      If PROGRESSIONE$="Geometrica"
  821.       RAGIONE#=(ULTIMOTERMINE/PRIMOTERMINE)^(1.0/(VLORITOTALI-1))
  822.       For A=1 To VLORITOTALI
  823.        If A=VLORITOTALI
  824.         MULTIPLO#=ULTIMOTERMINE
  825.        Else 
  826.         MULTIPLO#=RAGIONE#^(A-1)*PRIMOTERMINE
  827.        End If 
  828.        Proc TIC["Valore"+Str$(A)+":"+Str$(MULTIPLO#),ULTIMALINEA]
  829.        Proc MULTIPLO
  830.        Cls 0,0,72 To 639+1,135+1
  831.        Ink 2 : Draw 0,103 To 511,103 : Ink 1
  832.        Proc SOMMA
  833.       Next A
  834.       Proc MOSTRASINTETICO
  835.      End If 
  836.      PROGRESSIONE$=""
  837.      NUOVOMESSAGGIO=True
  838.     End If 
  839.     DENTROZONA=True
  840.    End If 
  841.    If ZONATOPO=17
  842.     MULTIPLO#=X Screen(X Mouse)/(607.0/FREQUENZAMASSIMA)
  843.     Hslider 0,136 To 607,143,FREQUENZAMASSIMA,MULTIPLO#,1 : Wait Vbl 
  844.     MULTIPLO#=MULTIPLO#+1 : Print At(76,17); Using "####";MULTIPLO#
  845.    End If 
  846.   Else If TASTODELTOPOPREMUTO=2
  847.    If ZONATOPO=19
  848.     Inverse On 
  849.     Print At(34,8);Chr$(147)+Chr$(148)
  850.     Proc TIC["Tasto sinistro del mouse>incremento veloce",ULTIMALINEA]
  851.     Inc NUOVAFREQUENZA
  852.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  853.     Proc FREQUENZA
  854.     NUOVOMESSAGGIO=True
  855.    End If 
  856.    If ZONATOPO=20
  857.     Inverse On 
  858.     Print At(36,8);Chr$(149)+Chr$(150)
  859.     Proc TIC["Tasto sinistro del mouse>decremento veloce",ULTIMALINEA]
  860.     Dec NUOVAFREQUENZA
  861.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  862.     Proc FREQUENZA
  863.     NUOVOMESSAGGIO=True
  864.    End If 
  865.   Else 
  866.    Inverse Off 
  867.    Print At(0,8);"Suona"
  868.    Print At(6,8);"Ferma"
  869.    Print At(25,8);"Frequenza"+Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  870.    Print At(0,18);"Suona"
  871.    Print At(6,19);"Sinusoidale"
  872.    Print At(6,20);"Triangolare"
  873.    Print At(6,21);"Dente di sega"
  874.    Print At(6,22);"Quadra"
  875.    Print At(6,23);"Disegno"
  876.    Print At(20,19);"Somma"
  877.    Print At(20,20);"Sottrai"
  878.    Print At(20,21);"Inverti"
  879.    Print At(20,22);"Rovescia"
  880.    Print At(20,23);"Progressione"
  881.    If NUOVOMESSAGGIO=True
  882.     Proc TIC["Premi Esc per uscire",ULTIMALINEA]
  883.     NUOVOMESSAGGIO=False
  884.    End If 
  885.    DENTROZONA=False
  886.   End If 
  887.  Until TASTOPREMUTO$<>""
  888. Until TASTOPREMUTO$=Chr$(27)
  889. Erase BANCODIIO
  890. Proc AZZERAFORMADONDA
  891. End Proc
  892. Procedure INGRANDISCI
  893. Cls 0,0,72 To 639+1,72+ALTEZZA+1
  894. Ink 2 : Draw 0,72+ZERO To 639,72+ZERO : Ink 1
  895. Clip 0,72 To 639,72+ALTEZZA
  896. Gr Locate 0,72+ZERO
  897. For X=0 To 639
  898.  POSIZIONE=POSIZIONEINGRANDIMENTO+X
  899.  DATO=Peek(POSIZIONE)
  900.  If DATO>127
  901.   Add DATO,-256
  902.  End If 
  903.  If POSIZIONE>=Start(BANCO) and POSIZIONE<=Start(BANCO)+Length(BANCO)-1
  904.   If POSIZIONE=Start(BANCO)+Length(BANCO)-1
  905.    Polyline X,72+ZERO-DATO To X,72+ZERO
  906.   Else 
  907.    Polyline To X,72+ZERO-DATO : Y=Ygr
  908.   End If 
  909.  Else 
  910.   Gr Locate X+1,72+ZERO
  911.  End If 
  912.  If POSIZIONE=NUOVOINIZIOCAMPIONE
  913.   Gr Writing 2 : Draw X,72 To X,72+ALTEZZA
  914.   Gr Writing 1 : Gr Locate X,Y
  915.  End If 
  916.  If POSIZIONE=NUOVAFINECAMPIONE
  917.   Gr Writing 2 : Draw X,72 To X,72+ALTEZZA
  918.   Draw X+3,72 To X+7,72
  919.   Draw X+3,74 To X+7,74
  920.   Draw X+3,72 To X+3,76
  921.   Gr Writing 1 : Gr Locate X,Y
  922.  End If 
  923. Next X
  924. Clip 
  925. End Proc
  926. Procedure INIZIO
  927. If INIZIO=True
  928.  Inverse On : Print At(39,ULTIMALINEA-2);"Inizio" : Inverse Off 
  929.  Print At(46,ULTIMALINEA-2);"Fine"
  930. Else 
  931.  Print At(39,ULTIMALINEA-2);"Inizio"
  932.  Inverse On : Print At(46,ULTIMALINEA-2);"Fine" : Inverse Off 
  933. End If 
  934. End Proc
  935. Procedure LIMITI[NUMERO,LIMITEMINIMO,LIMITEMASSIMO]
  936. '-> Limiti by Stefano Regattin 
  937. 'i> 19 maggio 1996 
  938. 'm> 12 giugno 1996 
  939. '--------------------------------------------------------
  940. 'La procedura equivale alle seguenti linee di programma: 
  941. ' If NUMERO<LIMITEMINIMO Then NUMERO=LIMITEMINIMO
  942. ' If NUMERO>LIMITEMASSIMO Then NUMERO=LIMITEMASSIMO
  943. 'Se LIMITEMINIMO ï¿½ maggiore di LIMITEMASSIMO ne scambia i valori 
  944. '----------------------------------------------------------------  
  945. If LIMITEMINIMO>LIMITEMASSIMO Then Swap LIMITEMINIMO,LIMITEMASSIMO
  946. NUMERO=Max(Min(NUMERO,LIMITEMASSIMO),LIMITEMINIMO)
  947. End Proc[NUMERO]
  948. Procedure LINEE
  949. NUOVOINIZIOCAMPIONE=Min(NUOVOINIZIOCAMPIONE,NUOVAFINECAMPIONE-511)
  950. If NUOVOINIZIOCAMPIONE<INIZIOCAMPIONE
  951.  NUOVOINIZIOCAMPIONE=INIZIOCAMPIONE
  952.  NUOVAFINECAMPIONE=NUOVOINIZIOCAMPIONE+511
  953. End If 
  954. NUOVAFINECAMPIONE=Max(NUOVAFINECAMPIONE,NUOVOINIZIOCAMPIONE+511)
  955. Gr Writing 2 : Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  956. XLINEAINIZIOCAMPIONE=(NUOVOINIZIOCAMPIONE-INIZIOCAMPIONE)/PASSO
  957. Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  958. Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63
  959. XLINEAFINECAMPIONE=(NUOVAFINECAMPIONE-INIZIOCAMPIONE)/PASSO
  960. Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63 : Gr Writing 1
  961. Inverse Off : Print At(0,8);"Inizio>Byte";NUOVOINIZIOCAMPIONE-Start(BANCO);
  962. Print " Fine>Byte";NUOVAFINECAMPIONE-Start(BANCO);
  963. LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  964. LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  965. Print " Lunghezza>";Str$(LUNGHEZZACAMPIONE)-" ";" Byte     "
  966. End Proc
  967. Procedure MESSAGGI
  968. Proc TIC[NOMEFILE$+Str$(Length(BANCO))+" Byte",ULTIMALINEA-1]
  969. Proc TIC[Chr$(147)+Chr$(148)+" "+Chr$(149)+Chr$(150)+" zona attiva "+Chr$(151)+Chr$(152)+" "+Chr$(153)+Chr$(154)+" spostamento Esc Esci",ULTIMALINEA]
  970. End Proc
  971. Procedure MISCELATIMBRI
  972. Sam Loop Off : Sam Stop : CICLO=False
  973. Cls 
  974. FILE$=Fsel$("**","","Carica il primo campione audio","Premi Esc per uscire")
  975. If Exist(FILE$)
  976.  Open In 1,FILE$
  977.  LUNGHEZZABANCO=Max(Lof(1),512)
  978.  Close 1
  979.  MEMORIA=Chip Free+Fast Free
  980.  If LUNGHEZZABANCO>MEMORIA
  981.   Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
  982.   Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  983.   SENZAMEMORIA=True
  984.  Else 
  985.   Reserve As Work BANCODIIO,LUNGHEZZABANCO
  986.   Bload FILE$,Start(BANCODIIO)
  987.   SENZAMEMORIA=False
  988.   Proc CARICARAWOIFF
  989.   LUNGHEZZABANCO1=LUNGHEZZABANCO
  990.   Reserve As Chip Work BANCO3,LUNGHEZZABANCO1
  991.   Copy Start(BANCO),Start(BANCO)+LUNGHEZZABANCO-1 To Start(BANCO3)
  992.  End If 
  993. End If 
  994. FILE$=Fsel$("**","","Carica il secondo campione audio","Premi Esc per uscire")
  995. If Exist(FILE$)
  996.  Open In 1,FILE$
  997.  LUNGHEZZABANCO=Max(Lof(1),512)
  998.  Close 1
  999.  MEMORIA=Chip Free+Fast Free
  1000.  If LUNGHEZZABANCO>MEMORIA
  1001.   Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
  1002.   Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  1003.   SENZAMEMORIA=True
  1004.  Else 
  1005.   Reserve As Work BANCODIIO,LUNGHEZZABANCO
  1006.   Bload FILE$,Start(BANCODIIO)
  1007.   SENZAMEMORIA=False
  1008.   Proc CARICARAWOIFF
  1009.   LUNGHEZZABANCO2=LUNGHEZZABANCO
  1010.   Reserve As Chip Work BANCODIIO,LUNGHEZZABANCO2
  1011.   Copy Start(BANCO),Start(BANCO)+LUNGHEZZABANCO-1 To Start(BANCODIIO)
  1012.  End If 
  1013. End If 
  1014. LUNGHEZZABANCO=Max(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  1015. If LUNGHEZZABANCO1=0 or LUNGHEZZABANCO2=0
  1016.  Proc TIC["Devi scegliere due campioni audio!",ULTIMALINEA]
  1017.  Wait 200 : Pop Proc
  1018. End If 
  1019. If SENZAMEMORIA=True Then Pop Proc
  1020. Reserve As Chip Work BANCO,LUNGHEZZABANCO
  1021. GENERACAMPIONE=True
  1022. Reserve Zone 8
  1023. MOSTRACAMPIONEPERMISCELAZIONE[BANCO3,0]
  1024. MOSTRACAMPIONEPERMISCELAZIONE[BANCODIIO,72]
  1025. Print At(0,8);Zone$("Suona",1)
  1026. Print At(6,8);Zone$("Ferma",2)
  1027. Print At(12,8);Zone$("Ciclo",3)
  1028. Print At(51,8);"Lunghezza>";Str$(Length(BANCO3))-" ";" Byte"
  1029. Print At(18,8);Zone$("Filtro",4)
  1030. Print At(0,17);Zone$("Suona",5)
  1031. Print At(6,17);"Lunghezza>";Str$(Length(BANCODIIO))-" ";" Byte"
  1032. Print At(25,8);Zone$("Frequenza",6);
  1033. Print Zone$(Chr$(147)+Chr$(148),7);
  1034. Print Zone$(Chr$(149)+Chr$(150),8);
  1035. Print ">";Str$(NUOVAFREQUENZA)-" ";" Hertz"
  1036. Proc CICLO
  1037. Proc FILTRO
  1038. Proc TIC["Spazio->miscela i due campioni Esc->esci",ULTIMALINEA]
  1039. Repeat 
  1040.  Repeat 
  1041.   TASTOPREMUTO$=Inkey$
  1042.   TASTODELTOPOPREMUTO=Mouse Key
  1043.   ZONATOPO=Mouse Zone
  1044.   If TASTODELTOPOPREMUTO=1
  1045.    If DENTROZONA=False
  1046.     If ZONATOPO=1
  1047.      Inverse On : Print At(0,8);"Suona"
  1048.      Sam Raw 1,Start(BANCO3),Length(BANCO3),NUOVAFREQUENZA
  1049.      Sam Raw 2,Start(BANCO3),Length(BANCO3),NUOVAFREQUENZA
  1050.     End If 
  1051.      If ZONATOPO=2
  1052.       Inverse On : Print At(6,8);"Ferma"
  1053.       Sam Stop 
  1054.      End If 
  1055.      If ZONATOPO=3
  1056.       CICLO= Not CICLO : Proc CICLO
  1057.      End If 
  1058.      If ZONATOPO=4
  1059.       FILTRO= Not FILTRO : Proc FILTRO
  1060.      End If 
  1061.     If ZONATOPO=5
  1062.      Inverse On : Print At(0,17);"Suona"
  1063.      Sam Raw 4,Start(BANCODIIO),Length(BANCODIIO),NUOVAFREQUENZA
  1064.      Sam Raw 8,Start(BANCODIIO),Length(BANCODIIO),NUOVAFREQUENZA
  1065.     End If 
  1066.     If ZONATOPO=6
  1067.      Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  1068.      NUOVAFREQUENZA=FREQUENZA
  1069.      Proc FREQUENZA
  1070.      NUOVOMESSAGGIO=True
  1071.     End If 
  1072.     If ZONATOPO=7
  1073.      Inverse On : Print At(34,8);Chr$(147)+Chr$(148)
  1074.      Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  1075.      Inc NUOVAFREQUENZA
  1076.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1077.      Proc FREQUENZA
  1078.      NUOVOMESSAGGIO=True
  1079.     End If 
  1080.     If ZONATOPO=8
  1081.      Inverse On : Print At(36,8);Chr$(149)+Chr$(150)
  1082.      Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  1083.      Dec NUOVAFREQUENZA
  1084.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1085.      Proc FREQUENZA
  1086.      NUOVOMESSAGGIO=True
  1087.     End If 
  1088.     DENTROZONA=True
  1089.    End If 
  1090.   Else If TASTODELTOPOPREMUTO=2
  1091.    If ZONATOPO=7
  1092.     Inverse On 
  1093.     Print At(34,8);Chr$(147)+Chr$(148)
  1094.     Proc TIC["Tasto sinistro del mouse>incremento veloce",ULTIMALINEA]
  1095.     Inc NUOVAFREQUENZA
  1096.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1097.     Proc FREQUENZA
  1098.     NUOVOMESSAGGIO=True
  1099.    End If 
  1100.    If ZONATOPO=8
  1101.     Inverse On 
  1102.     Print At(36,8);Chr$(149)+Chr$(150)
  1103.     Proc TIC["Tasto sinistro del mouse>decremento veloce",ULTIMALINEA]
  1104.     Dec NUOVAFREQUENZA
  1105.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1106.     Proc FREQUENZA
  1107.     NUOVOMESSAGGIO=True
  1108.    End If 
  1109.   Else 
  1110.    Inverse Off 
  1111.    Print At(0,8);"Suona"
  1112.    Print At(6,8);"Ferma"
  1113.    Print At(25,8);"Frequenza"+Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  1114.    Print At(0,17);"Suona"
  1115.    If NUOVOMESSAGGIO=True
  1116.     Proc TIC["Spazio->miscela i due campioni Esc->esci",ULTIMALINEA]
  1117.     NUOVOMESSAGGIO=False
  1118.    End If 
  1119.    DENTROZONA=False
  1120.   End If 
  1121.  Until TASTOPREMUTO$<>""
  1122.  If TASTOPREMUTO$=Chr$(27) Then Pop Proc
  1123. Until TASTOPREMUTO$=" "
  1124. If LUNGHEZZABANCO1>LUNGHEZZABANCO2
  1125.  SCELTA=1
  1126. Else If LUNGHEZZABANCO1=LUNGHEZZABANCO2
  1127.  Repeat 
  1128.   Proc TIC["I 2 campioni sono lunghi uguale; quale scegli come campione di partenza (1/2) ?",ULTIMALINEA]
  1129.   SCELTA$=Input$(1) : SCELTA=Val(SCELTA$)
  1130.  Until SCELTA=1 or SCELTA=2
  1131. Else 
  1132.  SCELTA=2
  1133. End If 
  1134. Proc TIC["Sto miscelando i due campioni...",ULTIMALINEA]
  1135. If SCELTA=1
  1136.  Copy Start(BANCO3),Start(BANCO3)+LUNGHEZZABANCO1-1 To Start(BANCO)
  1137. Else 
  1138.  Copy Start(BANCODIIO),Start(BANCODIIO)+LUNGHEZZABANCO2-1 To Start(BANCO)
  1139. End If 
  1140. LUNGHEZZAMISCELAZIONE=Min(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  1141. For INDIRIZZO=0 To LUNGHEZZAMISCELAZIONE-1
  1142.  VLOREPERCENTUALE=(INDIRIZZO*100)/LUNGHEZZAMISCELAZIONE
  1143.  If SCELTA=1
  1144.   DATO1=(Peek(Start(BANCO3)+INDIRIZZO)*VLOREPERCENTUALE)/100
  1145.   DATO2=(Peek(Start(BANCODIIO)+INDIRIZZO)*(100-VLOREPERCENTUALE))/100
  1146.  Else 
  1147.   DATO1=(Peek(Start(BANCO3)+INDIRIZZO)*(100-VLOREPERCENTUALE))/100
  1148.   DATO2=(Peek(Start(BANCODIIO)+INDIRIZZO)*VLOREPERCENTUALE)/100
  1149.  End If 
  1150.  If DATO1>127
  1151.   Add DATO1,-256
  1152.  End If 
  1153.  If DATO2>127
  1154.   Add DATO2,-256
  1155.  End If 
  1156.  DATOMISCELAZIONE=(DATO1+DATO2)/2
  1157.   If DATOMISCELAZIONE<0
  1158.   Add DATOMISCELAZIONE,256
  1159.  End If 
  1160.  Poke Start(BANCO)+INDIRIZZO,DATOMISCELAZIONE
  1161. Next INDIRIZZO
  1162. ANNOTAZIONI$="SamplesMaster by Stefano Regattin"
  1163. End Proc
  1164. Procedure MOSTRACAMPIONE
  1165. INIZIOCAMPIONE=NUOVOINIZIOCAMPIONE : FINECAMPIONE=NUOVAFINECAMPIONE
  1166. PASSO=(FINECAMPIONE-INIZIOCAMPIONE+1)/640+1 : PASSO=Max(PASSO,1)
  1167. Cls 0,0,0 To 639+1,63+1 : Ink 2 : Draw 0,31 To 639,31 : Gr Locate 0,31 : Ink 1
  1168. For INDIRIZZO=INIZIOCAMPIONE To FINECAMPIONE Step PASSO
  1169.  DATO=Peek(INDIRIZZO) : If DATO>127 Then Add DATO,-256
  1170.  Polyline To X,31-DATO/4 : Inc X
  1171. Next INDIRIZZO
  1172. XLINEAINIZIOCAMPIONE=0 : XLINEAFINECAMPIONE=X-1
  1173. Gr Writing 2 : Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  1174. Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63 : Gr Writing 1
  1175. Inverse Off : Print At(0,8);"Inizio>Byte";INIZIOCAMPIONE-Start(BANCO);
  1176. Print " Fine>Byte";FINECAMPIONE-Start(BANCO);
  1177. Print " Lunghezza>";Str$(LUNGHEZZACAMPIONE)-" ";" Byte     "
  1178. DIVISIONESLIDERINGRANDIMENTO#=640.0/PASSO
  1179. End Proc
  1180. Procedure MOSTRACAMPIONEPERMISCELAZIONE[B,P]
  1181. IC=Start(B) : FC=Start(B)+Length(B)-1
  1182. PASSO=(FC-IC+1)/640+1 : PASSO=Max(PASSO,1)
  1183. Ink 2 : Draw 0,P+31 To 639,P+31 : Gr Locate 0,P+31 : Ink 1
  1184. For INDIRIZZO=IC To FC Step PASSO
  1185.  DATO=Peek(INDIRIZZO) : If DATO>127 Then Add DATO,-256
  1186.  Polyline To X,P+31-DATO/4 : Inc X
  1187. Next INDIRIZZO
  1188. End Proc
  1189. Procedure MOSTRASINTETICO
  1190. Shared LUNGHEZZASINTETICO
  1191. Cls 0,0,0 To 511+1,63+1
  1192. Ink 2 : Draw 0,31 To 511,31 : Ink 1
  1193. Gr Locate 0,31 : DIVISORE=1
  1194. For X=0 To LUNGHEZZASINTETICO-1
  1195.  DATO=F0RMADONDA(X)/DIVISORE
  1196.  If DATO>127 or DATO<-128
  1197.   Cls 0,0,0 To 511+1,63+1
  1198.   Ink 2 : Draw 0,31 To 511,31 : Ink 1
  1199.   Gr Locate 0,31 : Inc DIVISORE : X=-1
  1200.  End If 
  1201.  If X>-1
  1202.   Polyline To(X*512)/LUNGHEZZASINTETICO,31-DATO/4
  1203.   If DATO<0
  1204.    Add DATO,256
  1205.   End If 
  1206.   Poke Start(BANCO)+X,DATO
  1207.  End If 
  1208. Next X
  1209. End Proc
  1210. Procedure MOSTRALAZONAATTIVA
  1211. Print At(65,8);ZONAATTIVA$
  1212. End Proc
  1213. Procedure MULTIPLO
  1214. Shared FREQUENZAMASSIMA,LUNGHEZZASINTETICO,MULTIPLO#
  1215. If MULTIPLO#>1
  1216.  Reserve As Work BANCO3,LUNGHEZZASINTETICO
  1217.  Repeat 
  1218.   For X=0 To LUNGHEZZASINTETICO-1 Step MULTIPLO#
  1219.    DATO=Peek(Start(BANCODIIO)+X)
  1220.    INDIRIZZO=Start(BANCO3)+M
  1221.    Poke INDIRIZZO,DATO : Inc M : Exit If M=LUNGHEZZASINTETICO
  1222.   Next X
  1223.  Until M=LUNGHEZZASINTETICO
  1224.  Gr Locate 0,103
  1225.  For X=0 To LUNGHEZZASINTETICO-1
  1226.   DATO=Peek(Start(BANCO3)+X)
  1227.   INDIRIZZO=Start(BANCODIIO)+X
  1228.   Poke INDIRIZZO,DATO
  1229.   If DATO>127
  1230.    Add DATO,-256
  1231.   End If 
  1232.   Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  1233.  Next X
  1234.  Erase BANCO3
  1235.  Inverse Off 
  1236.  Hslider 0,136 To 607,143,FREQUENZAMASSIMA,MULTIPLO#-1,1
  1237.  Print At(76,17); Using "####";MULTIPLO#
  1238. End If 
  1239. End Proc
  1240. Procedure SALVAUNFILE
  1241. Sam Loop Off : Sam Stop : CICLO=False
  1242. FILE$=Fsel$("**",NOMEFILE$,"Salva un campione audio","Premi Esc per uscire")
  1243. If FILE$<>""
  1244.  TIC["Vuoi salvarlo come file IFF (s/n) ?",ULTIMALINEA]
  1245.  RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  1246.  If RISPOSTA$="s"
  1247.   Proc TIC["Sto salvando il campione audio IFF",ULTIMALINEA-1]
  1248.   Proc TIC[FILE$,ULTIMALINEA]
  1249.   LUNGHEZZANOME=Len(NOMEFILE$)/4*4
  1250.   RESTONOME=Len(NOMEFILE$) mod 4
  1251.   If RESTONOME>0
  1252.   Add LUNGHEZZANOME,4
  1253.   End If 
  1254.   LUNGHEZZAANNO=36
  1255.   LUNGHEZZABANCO=40+8+LUNGHEZZAANNO+8+LUNGHEZZACAMPIONE
  1256.   If NOMEFILE$<>""
  1257.    Add LUNGHEZZABANCO,8+LUNGHEZZANOME
  1258.   End If 
  1259.   Reserve As Work BANCODIIO,LUNGHEZZABANCO
  1260.   INDIRIZZO=Start(BANCODIIO)
  1261.   Poke$ INDIRIZZO,"FORM"
  1262.   Add INDIRIZZO,4
  1263.   Loke INDIRIZZO,LUNGHEZZABANCO-8
  1264.   Add INDIRIZZO,4
  1265.   Poke$ INDIRIZZO,"8SVXVHDR"
  1266.   Add INDIRIZZO,8
  1267.   Loke INDIRIZZO,20
  1268.   Add INDIRIZZO,4
  1269.   Loke INDIRIZZO,0
  1270.   Add INDIRIZZO,4
  1271.   Loke INDIRIZZO,LUNGHEZZACAMPIONE
  1272.   Add INDIRIZZO,4
  1273.   Loke INDIRIZZO,0
  1274.   Add INDIRIZZO,4
  1275.   Doke INDIRIZZO,NUOVAFREQUENZA
  1276.   Add INDIRIZZO,2
  1277.   Doke INDIRIZZO,256
  1278.   Add INDIRIZZO,2
  1279.   Doke INDIRIZZO,256
  1280.   Add INDIRIZZO,2
  1281.   Doke INDIRIZZO,0
  1282.   Add INDIRIZZO,2
  1283.   If NOMEFILE$<>""
  1284.    Poke$ INDIRIZZO,"NAME"
  1285.    Add INDIRIZZO,4
  1286.    Loke INDIRIZZO,LUNGHEZZANOME
  1287.    Add INDIRIZZO,4
  1288.    Poke$ INDIRIZZO,NOMEFILE$
  1289.    Add INDIRIZZO,Len(NOMEFILE$)
  1290.    If RESTONOME>0
  1291.     ZERINELNOME=4-RESTONOME
  1292.     Inverse On 
  1293.     For A=1 To ZERINELNOME
  1294.      Poke INDIRIZZO,0
  1295.      Inc INDIRIZZO
  1296.     Next A
  1297.    End If 
  1298.   End If 
  1299.   Poke$ INDIRIZZO,"ANNO"
  1300.   Add INDIRIZZO,4
  1301.   Loke INDIRIZZO,LUNGHEZZAANNO
  1302.   Add INDIRIZZO,4
  1303.   Poke$ INDIRIZZO,"SamplesMaster by Stefano Regattin"+String$(Chr$(0),3)
  1304.   Add INDIRIZZO,LUNGHEZZAANNO
  1305.   Poke$ INDIRIZZO,"BODY"
  1306.   Add INDIRIZZO,4
  1307.   Loke INDIRIZZO,LUNGHEZZACAMPIONE
  1308.   Add INDIRIZZO,4
  1309.   Copy INIZIOCAMPIONE,FINECAMPIONE To INDIRIZZO
  1310.   Add INDIRIZZO,LUNGHEZZACAMPIONE
  1311.   If INDIRIZZO=Start(BANCODIIO)+Length(BANCODIIO)
  1312.    Proc TIC["Conversione campione audio da RAW ad IFF avvenuta",ULTIMALINEA]
  1313.   Else 
  1314.    Proc TIC["Conversione campione audio da RAW ad IFF fallita!",ULTIMALINEA]
  1315.    Erase BANCODIIO
  1316.    Wait 200
  1317.    Pop Proc
  1318.   End If 
  1319.   Bsave FILE$,Start(BANCODIIO) To Start(BANCODIIO)+Length(BANCODIIO)
  1320.   Erase BANCODIIO
  1321.  Else 
  1322.   Proc TIC["Sto salvando il campione audio RAW",ULTIMALINEA-1]
  1323.   Proc TIC[FILE$,ULTIMALINEA]
  1324.   Bsave FILE$,INIZIOCAMPIONE To FINECAMPIONE+1
  1325.  End If 
  1326.  Wait 200
  1327. End If 
  1328. End Proc
  1329. Procedure SETTALEZONE
  1330. Reserve Zone 21
  1331. Print At(0,ULTIMALINEA-3);Zone$("Suona",1)
  1332. Print At(0,ULTIMALINEA-2);Zone$("Ferma",2)
  1333. Print At(6,ULTIMALINEA-3);Zone$("Ciclo",3)
  1334. Print At(12,ULTIMALINEA-3);Zone$("Filtro",4)
  1335. Print At(21,ULTIMALINEA-3);"Mostra campione"
  1336. Print At(19,ULTIMALINEA-2);Zone$("Tutto",5)
  1337. Print At(26,ULTIMALINEA-2);Zone$("Tra le linee",6)
  1338. Print At(40,ULTIMALINEA-3);"Posizione"
  1339. Inverse On : Print At(39,ULTIMALINEA-2);Zone$("Inizio",7) : Inverse Off 
  1340. Print At(46,ULTIMALINEA-2);Zone$("Fine",8)
  1341. Print At(53,ULTIMALINEA-3);"Cerca lo zero"
  1342. Print At(51,ULTIMALINEA-2);Zone$("<Indietro",9)
  1343. Print At(61,ULTIMALINEA-2);Zone$("Avanti>",10)
  1344. Print At(69,ULTIMALINEA-3);Zone$("Carica",11)
  1345. Set Zone 12,0,72 To 639,72+ALTEZZA
  1346. Set Zone 13,0,0 To 639,63
  1347. Print At(6,ULTIMALINEA-2);Zone$("Genera",14)
  1348. Print At(69,ULTIMALINEA-2);Zone$("Salva",15)
  1349. Print At(76,ULTIMALINEA-2);Zone$("Esci",16)
  1350. Set Zone 17,0,72+ALTEZZA+1 To 639,72+ALTEZZA+1+7
  1351. YSLIDERINGRANDIMENTO=72+ALTEZZA+1
  1352. Hslider 0,YSLIDERINGRANDIMENTO To 639,YSLIDERINGRANDIMENTO+7,PASSO,0,1
  1353. Print At(0,ULTIMALINEA-5);Zone$("Frequenza",18);
  1354. Print Zone$(Chr$(147)+Chr$(148),19);
  1355. Print Zone$(Chr$(149)+Chr$(150),20);
  1356. Print ">"
  1357. Print At(26,ULTIMALINEA-5);Zone$("MixTimbri",21)
  1358. End Proc
  1359. Procedure SETTASCHERMO
  1360. If Ntsc Then LUNGHEZZASCHERMO=200 Else LUNGHEZZASCHERMO=256
  1361. If Ntsc Then RIDUZIONE=4 Else RIDUZIONE=2
  1362. ALTEZZA=256/RIDUZIONE-1 : ZERO=128/RIDUZIONE-1
  1363. ULTIMALINEA=LUNGHEZZASCHERMO/8-1
  1364. Screen Open 0,640,LUNGHEZZASCHERMO,4,Hires : Curs Off : Flash Off 
  1365. Palette $60,$CCC,$C00,$C0 : Pen 1 : Paper 0 : Cls : Curs Pen 1
  1366. Wait Vbl : Limit Mouse 
  1367. End Proc
  1368. Procedure SLIDERINGRANDIMENTO
  1369. Hslider 0,YSLIDERINGRANDIMENTO To 639,YSLIDERINGRANDIMENTO+7,PASSO,POSIZIONESLIDER,1
  1370. End Proc
  1371. Procedure SOMMA
  1372. Shared LUNGHEZZASINTETICO
  1373. For X=0 To LUNGHEZZASINTETICO-1
  1374.  DATO=Peek(Start(BANCODIIO)+X)
  1375.  If DATO>127
  1376.   Add DATO,-256
  1377.  End If 
  1378.  Add F0RMADONDA(X),DATO
  1379. Next X
  1380. End Proc
  1381. Procedure SUONA
  1382. Sam Raw 1,NUOVOINIZIOCAMPIONE,LUNGHEZZACAMPIONE,NUOVAFREQUENZA
  1383. Sam Raw 2,NUOVOINIZIOCAMPIONE,LUNGHEZZACAMPIONE,NUOVAFREQUENZA
  1384. End Proc
  1385. Procedure TIC[TESTO$,LINEA]
  1386. '-> Testo Invertito e Centrato by Stefano Regattin 
  1387. 'i> 23 maggio 1996 
  1388. 'm> 25 maggio 1996 
  1389. '--------------------------------------------------------------------------- 
  1390. 'LINEA contiene il numero di linea dove si posizioner� il testo; se vale -1
  1391. ' (True) il testo sar� posizionato alla linea dove si trova il cursore; in 
  1392. ' questo caso sar� necessario un comando PRINT per spostare il cursore 
  1393. '----------------------------------------------------------------------
  1394. If LINEA=True Then L=Y Curs Else L=LINEA
  1395. Locate 0,L : Inverse On : Cline : Centre TESTO$ : Inverse Off 
  1396. End Proc